package com.koron.css2.serviceManage.impl;

import com.koron.css2.ServerInterface;
import com.koron.css2.serviceManage.bean.*;
import com.koron.css2.serviceManage.mapper.RoleMapper;
import com.koron.css2.serviceManage.utils.CommonUtils;
import com.koron.util.Constant;
import com.koron.util.JsonUtils;
import com.mysql.cj.util.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.koron.ebs.mybatis.SessionFactory;
import org.swan.bean.MessageBean;

import java.util.List;

/**
* 修改角色信息
* @author DaiSn
* @version 创建时间：2018年10月18日 上午8:51:52
*/
public class RoleUpdate  implements ServerInterface {
	
	private static Logger logger = LogManager.getLogger(RoleUpdate.class);
	
	@Override
	public MessageBean<?> exec(SessionFactory factory, UserInfoBean userInfo, RequestBean req) {
		RoleMapper mapper = factory.getMapper(RoleMapper.class);
		RoleBean bean = null;
		try {
			String objectToJson = JsonUtils.objectToJson(req.getData());
			bean = JsonUtils.jsonToPojo(objectToJson, RoleBean.class);
			bean.setModifyBy(userInfo.getUserInfo().getName());
			bean.setModifyTime(CommonUtils.getCurrentTime());
			if (bean.getrModuleBeans().size()==0) {
				factory.close(false);
				return MessageBean.create(Constant.ILLEGAL_PARAMETER, "角色的模块信息为空", void.class);
			}
			if (StringUtils.isNullOrEmpty(bean.getId())) {
				factory.close(false);
				return MessageBean.create(Constant.ILLEGAL_PARAMETER, "id为空", void.class);
			}
		} catch (Exception e) {
			logger.error("非法参数",e);
			factory.close(false);
			return MessageBean.create(Constant.ILLEGAL_PARAMETER, "非法参数", void.class);
		}
		
		RoleBean findRoleById = mapper.findRoleById(bean);
		//更新角色信息
		mapper.updateRole(bean);
		//更新角色-用户信息
		if (bean.getOwnNames().size() != 0) {
			RoleUserBean roleUserBean = new RoleUserBean();
			roleUserBean.setRoleId(bean.getId());
			roleUserBean.setLoginid(bean.getOwnNames().toString().replace("[", "").replace("]", "").replaceAll(" ", ""));
			if(!roleUserBean.getLoginid().contains("admin")){
				roleUserBean.setLoginid(roleUserBean.getLoginid()+",admin");
			}
			mapper.updateRoleUser(roleUserBean);
		}
		//如果是admin（水司默认管理员角色，不允许修改角色模块操作信息）
		if(!StringUtils.isNullOrEmpty(findRoleById.getAdminRemark()) &&findRoleById.getAdminRemark().equals("新建水司添加管理员用户")){
			logger.error("系统默认的admin角色不允许修改角色模块操作信息");
		}else{
			//保存角色-模块-操作关系 
			List<RoleModuleBean> rModuleBeans = bean.getrModuleBeans();
			//先删除模块操作信息(以防有历史数据)
			mapper.delRoleModule(bean.getId());
			if(rModuleBeans.size()!=0){
				//不为空，保存操作模块信息（角色id为上面更新角色时候的id值）
				for (RoleModuleBean roleModuleBean : rModuleBeans) {
					roleModuleBean.setRoleId(bean.getId());
					mapper.saveRoleModule(roleModuleBean);
				}
			}
		}
		return MessageBean.create(Constant.MESSAGE_INT_SUCCESS, "success", void.class);
	}
}